/-app
/-core
/-headers
/-imports
/-io
/-managed ...
/-managed/metadata ...
/-managed/metadata/enums
ClrDirectory.ts
ClrMetadata.ts
CodedIndexReader.ts
MetadataStreams.ts
TableCompletionReader.ts
TableReader.ts
TableStream.ts
bits.ts
/-managed/tables
AppDomain.ts
Assembly.ts
ConstructedGenericType.ts
EventInfo.ts
FieldInfo.ts
MethodInfo.ts
ParameterInfo.ts
PropertyInfo.ts
Type.ts
TypeReference.ts
/-typings
/-unmanaged
pe.html
pe.ts
1
module pe.managed.metadata {
2
 
3
  export class TableCompletionReader {
4
    constructor(private _tableStream: TableStream, private _metadataStreams: MetadataStreams) {
5
 
6
      this.lookupResolutionScope = this._createLookup(TableReader.resolutionScopeTables);
7
      this.lookupTypeDefOrRef = this._createLookup(TableReader.typeDefOrRefTables);
8
    
9
    }
10
 
11
    readString(index: number): string {
12
      return this._tableStream.stringIndices[index];
13
    }
14
 
15
    readGuid(index: number): string {
16
      return this._metadataStreams.guids[index];
17
    }
18
 
19
    copyFieldRange(fields: FieldInfo[], start: number, end?: number) {
20
      this._copyDefRange(fields, TableKind.Field, start, end);
21
    }
22
 
23
    copyMethodRange(methods: MethodInfo[], start: number, end?: number) {
24
      this._copyDefRange(methods, TableKind.MethodDef, start, end);
25
    }
26
 
27
    copyParamRange(parameters: ParameterInfo[], start: number, end: number) { 
28
      this._copyDefRange(parameters, TableKind.Param, start, end);
29
    }
30
 
31
    private _copyDefRange(defs: any[], tableKind: TableKind, start: number, end?: number) {
32
      var table = this._tableStream.tables[tableKind];
33
 
34
      if (!end && typeof end === "undefined")
35
        end = table.length + 1;
36
 
37
      for (var i = start - 1; i < end - 1; i++) {
38
        var row = table[i];
39
        defs.push(row.def);
40
      }
41
    }
42
 
43
    lookupResolutionScope: (codedIndex: number) => any;
44
 
45
    lookupTypeDefOrRef: (codedIndex: number) => TypeReference;
46
 
47
    private _createLookup(tables: number[]): (codedIndex: number) => any {
48
      var tableKindBitCount = calcRequredBitCount(tables.length);
49
 
50
      return (codedIndex: number) => {
51
        var rowIndex = codedIndex >> tableKindBitCount;
52
        if (rowIndex === 0)
53
          return null;
54
 
55
        var tableKindCode = codedIndex - (rowIndex << tableKindBitCount);
56
        var tableKind = tables[tableKindCode];
57
 
58
        var table: any[] = this._tableStream.tables[tableKind];
59
        if (!table)
60
          return null; // TODO: why?
61
        var row = table[rowIndex-1];
62
        if (!row)
63
          return null; // TODO: why??
64
 
65
        var result = row.def;
66
 
67
        return result;
68
      };
69
    }
70
 
71
    resolveTypeReference(resolutionScope: any, namespace: string, name: string): Type {
72
      return null;
73
    }
74
 
75
    readFieldSignature(field: FieldInfo, blobIndex: number) {
76
    }
77
  }
78
 
79
}